//
//  status.swift
//  我的微博
//
//  Created by 杨庆 on 15/10/22.
//  Copyright © 2015年 双元班. All rights reserved.
//

import UIKit
/// 微博模型
class status: NSObject {
    /// 微博创建时间
    var created_at:String?
    /// 微博ID
    var id: Int = 0
    /// 微博信息内容
    var text: String?
    /// 微博来源
    var source: String?
    /// 配图的数组
    var pic_urls: [[String : AnyObject]]?{
        didSet{
            //判断数组中是否有值,nil
            if pic_urls?.count == nil{
                return
            }
            //实例化数组
            pictureURLs = [NSURL]()
            //循环遍历数组生成URL的数组
            for dict in pic_urls!{
                if let urlString = dict["thumbnail_pic"] as? String{
                    pictureURLs?.append(NSURL(string: urlString)!)
                }
            }
        }
    }
    /// 配图的URL的数组
    var pictureURLs: [NSURL]?
    /// 用户
    var user: User?
    /// 加载微博的数据
    class func loadStatus(finished: (dataList: [status]?,error : NSError?) ->()){
        netWorkTools.sharedTool.loadStatus { (result, error) -> () in
            //判断是否有错误
            if error != nil{
            finished(dataList: nil, error: error! )
            return
            }
            //没有数据,就是有array 就是要求循环遍历这个数组来进行的取值
            if let array = result!["statuses"] as? [[String : AnyObject]]{
                //遍历数组,字典转模型
                //TODO: 有错误
                var list = [status]()
                for dict in array{
                    list.append(status(dict: dict))
                }
                //获得完整的微博的数组,可以回调
                finished(dataList: list, error: nil)
            }else{
                finished(dataList: nil, error: nil)
            }
        }
    }
    //MARK:-构造函数;
    init(dict : [String : AnyObject]){
        super.init()
        //这个总的方法: 会自动的调用的 setvalue forKey 给每一个属性赋值;
        setValuesForKeysWithDictionary(dict)
    }
    //MARK:-有选择的字典转模型;
    override func setValue(value: AnyObject?, forKey key: String) {
        //判断是否是 user 可以进行的单独的进行的转模型
        if key == "user"{
            //判断 value 是否是一个有效的字典
            if let dict = value as? [String : AnyObject]{
                //创建用户数据
                //相当于的是(嵌套的) 双重的字典转模型的方法
                user = User(dict: dict)
            }
            return
        }
        super.setValue(value, forKey: key)
    }
    
    //还要写一个,setvalueForUndefinedKey ,保证数据的正常的加载
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
    }
    override var description: String{
        let keys = ["created_at","id","text","source","pic_urls"]
        return "\(dictionaryWithValuesForKeys(keys))"
    }
}
//  总结一个知识点....  配套的返回的字符串的格式:---> "\(转加的内容)"